package de.htw.ejb.model;

import de.htw.ejb.model.Artikel;
import de.htw.ejb.model.Pizza;
import de.htw.ejb.model.Zutat;

import java.util.Collection;
import java.util.Iterator;

import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

/**
 * Diese Klasse implementiert die datentechnische Darstellung einer Pizza.<br>
 * Die Klasse erbt von der abstrakten Oberklasse {@link Artikel}
 * 
 * @author Thomas Schoenfeld
 * @version 20130314-01
 */
@Entity
@NamedQueries( {
		@NamedQuery( name = "selectPizzaById", query = "SELECT p FROM Pizza p WHERE p.id = :id" ),
		@NamedQuery( name = "selectPizzaByBezeichnung", query = "SELECT p FROM Pizza p WHERE p.bezeichnung = :bezeichnung" ) } )
public class Pizza extends Artikel
{
	
	public static final String	SELECT_BY_ID					= "selectPizzaById";
	public static final String	SELECT_BY_BEZEICHNUNG	= "selectPizzaByBezeichnung";
	
	public static final String	ID										= "id";
	public static final String	BEZEICHNUNG						= "bezeichnung";
	
	private static final long		serialVersionUID			= 1L;
	
	@OneToMany
	private Collection<Zutat>		zutaten;
	
	public Collection<Zutat> getZutaten()
	{
		return zutaten;
	}
	
	public void setZutaten( Collection<Zutat> zutaten )
	{
		this.zutaten = zutaten;
	}
	
	public void hinzufuegenZutat( Zutat zutat )
	{
		this.zutaten.add( zutat );
	}
	
	public void loeschenZutat( Zutat zutat )
	{
		this.zutaten.remove( zutat );
	}
	
	@Override
	public String toString()
	{
		 String lineSeparator = System.getProperty("line.separator");
		    String ausgabe="Artikel:		"+lineSeparator+
		    			   "Name:			"+this.getBezeichnung()+lineSeparator+
		    			   "Artikelnummer:  "+this.getArtikelnummer()+lineSeparator+
		    			   "Preis:			"+this.getPreis();
		    String zutaten="";
		    Iterator<Zutat> it=this.getZutaten().iterator();
		   while(it.hasNext()) {
			   zutaten+=it.toString()+lineSeparator;
			   it.next();
		   }
		   ausgabe+=zutaten;
		    			   
			
			return ausgabe;
	}
	
	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + ( ( zutaten == null ) ? 0 : zutaten.hashCode() );
		return result;
	}
	
	@Override
	public boolean equals( Object obj )
	{
		if ( this == obj )
			return true;
		if ( !super.equals( obj ) )
			return false;
		if ( getClass() != obj.getClass() )
			return false;
		Pizza other = ( Pizza ) obj;
		if ( zutaten == null )
		{
			if ( other.zutaten != null )
				return false;
		}
		else if ( !zutaten.equals( other.zutaten ) )
			return false;
		return true;
	}
}
